package com.ctg.behavior.common.attribution;

import java.util.ArrayList;
import java.util.List;

import com.ctg.behavior.common.calc.CtCalcCommonBody;
import com.ctg.behavior.common.calc.CtCalcMeasure;

import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper = false)
@Data
public class CtAttributionCalcBody extends CtCalcCommonBody {

//	/*
//	{
//		"fromDate": "2021-09-13",
//		"toDate": "2021-09-16",
//		"useCache": true,
//		"rangeText": "",
//		"directConversion": true,
//		"targetEvent": {
//			"eventId": "_AppClick",
//			"aggregator": "general",
//			"field": "",
//			"filter": {
//				"relation": "or",
//				"conditions": [
//					{
//						"field": "event._AppClick._lib",
//						"function": "equal",
//						"params": [
//							"Android",
//							"iOS"
//						]
//					},
//					{
//						"field": "event._AppClick._lib",
//						"function": "equal",
//						"params": [
//							"js",
//							"python"
//						]
//					}
//				]
//			}
//		},
//		"linkEvents": [
//			{
//				"eventId": "_AppStart",
//				"linkProperties": {
//					"currentEventProperty": "event._AppStart._lib",
//					"targetEventProperty": "event._AppClick._lib"
//				},
//				"filter": {
//					"relation": "and",
//					"conditions": [
//						{
//							"field": "event._AppStart._lib",
//							"function": "equal",
//							"params": [
//								"Android",
//								"iOS"
//							]
//						}
//					]
//				}
//			},
//			{
//				"eventId": "AppInstall",
//				"linkProperties": {},
//				"filter": {
//					"relation": "and",
//					"conditions": [
//						{
//							"field": "event.AppInstall._lib",
//							"function": "equal",
//							"params": [
//								"Android",
//								"iOS"
//							]
//						}
//					]
//				}
//			}
//		],
//		"attributionEvents": {
//			"events": [
//				{
//					"eventId": "addToStorepingcart",
//					"linkEvents": [
//						{
//							"eventId": "_AppStart",
//							"linkProperties": {
//								"targetEventProperty": "event._AppStart._lib",
//								"currentEventProperty": "event.addToStorepingcart._lib"
//							}
//						},
//						{
//							"eventId": "AppInstall",
//							"linkProperties": {
//								"targetEventProperty": "event.AppInstall._lib",
//								"currentEventProperty": "event.addToStorepingcart._lib"
//							}
//						}
//					]
//				},
//				{
//					"eventId": "_AppViewScreen",
//					"linkEvents": [
//						{
//							"eventId": "_AppStart",
//							"linkProperties": {
//								"targetEventProperty": "event._AppStart._lib",
//								"currentEventProperty": "event._AppViewScreen._lib"
//							}
//						},
//						{
//							"eventId": "AppInstall",
//							"linkProperties": {
//								"targetEventProperty": "event.AppInstall._lib",
//								"currentEventProperty": "event._AppViewScreen._lib"
//							}
//						}
//					]
//				}
//			],
//			"filter": {
//				"relation": "or",
//				"conditions": [
//					{
//						"field": "event._Anything._lib",
//						"function": "equal",
//						"params": [
//							"Android",
//							"iOS"
//						]
//					},
//					{
//						"field": "event._Anything._lib",
//						"function": "equal",
//						"params": [
//							"js"
//						]
//					}
//				]
//			},
//			"byFields": [
//				"event._Anything._lib"
//			]
//		},
//		"filter": {
//			"relation": "or",
//			"conditions": [
//				{
//					"field": "event._Anything._lib",
//					"function": "equal",
//					"params": [
//						"Android",
//						"iOS"
//					]
//				},
//				{
//					"field": "event._Anything._lib",
//					"function": "equal",
//					"params": [
//						"js"
//					]
//				},
//				{
//					"field": "event._Anything._lib",
//					"function": "equal",
//					"params": [
//						"python"
//					]
//				}
//			]
//		},
//		"modelType": "linear",
//		"lookbackWindow": {
//			"unit": "day",
//			"value": 1
//		}
//	}
//	 */
	
	// 目标转化事件
	private CtCalcMeasure targetEvent = new CtCalcMeasure();
	// 设置前向关联事件(在归因分析中作为归因的辅助曝光点参与计算，提升归因模型的计算精度)
	private List<CtLinkEvent> linkEvents = new ArrayList<>();
	// 待归因事件
	private CtAttributions attributionEvents = new CtAttributions();
	
	// 分析模型
	// first:  首次触点归因
	// last:   末次触点归因
	// linear: 线性归因
	// position: 位置归因
	// time_decay: 时间衰减归因
	private String modelType = "first";
	// 归因窗口期
	private CtLookbackWindow lookbackWindow = new CtLookbackWindow();
	
	// 直接转化参与归因计算
	// 若一个“目标转化事件”在转化前，没有发生任何相关的“待归因事件”，则认为该“目标转化事件”属于直接转化。
	private Boolean directConversion = true;
	private Boolean useCache = true;


}
